热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

黑体|两端_网络编程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。第17章 网络编程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。



第17章 网络编程

17.1 网络编程的基础知识


17.1.1 网络基础知识

通信协议负责对传输速率,传输代码,代码结构,传输控制步骤,出错控制等制度处理标准,

通信协议通常由三个部分组成

1. 语义部分  用于决定双发对话的类型,

2. 语法部分  用于决定双方对话的格式

3. 变换规则  用于决定通信双方的应答关系

 

IP (Internet Protocol)协议又称互联网协议  是支持网间互联的数据报协议

TCP(Transmission Control Protocol) 传输控制协议 是一种可靠的数据信息传递服务

 


17.1.2 IP地址和端口号

IP地址是一个32位 ,但通常为了便于记忆,通常把它分成48位的2进制,每8位之间用圆点隔开,每个8位可以转换为0~25510进制数字

 

IP地址用于唯一地标示网络上的一个通信实体,

 

端口号 是一个216此方的的整数,用于表示数据交给那个通信程序处理

端口是运用程序与外界的交流出入口

 


17.2 java的基本网络支持

java为网络提供了java.net


17.2.1 使用InetAddress

java 提供了InetAddress类来代表IP地址

 


17.2.3 URL URLConnection URLPermission

URL (Uniform Resource Identifiers) 对象代表统一资源定位器,资源可以是简单的文件或目录,也可以是对更为复杂对象的引用

 

程序中DownUtils 类中的download()方法按如下步骤来实现多线程下载

1. 创建URL 对象

2. 获取指定URL对象所指向资源的大小通过getContentLength()

3. 在本地磁盘上创建一个与网络资源具有相同大小的空文件

4. 计算每个线程应该下载网络资源的那部分

5. 依次创建,启动多个线程来下载网络资源指定部分

 


17.3 基于TCP协议的网络编程

TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在两端之间形成虚拟网络,两方就可以通过虚拟链路进行通信

 


17.3.1 TCP协议基础

IP 协议只能保证可以发送和接收消息,但IP协议还不能保证计算机能发送和接收分组数据包

TCP 协议可以用来提供可靠的并且无差错的通信服务

TCP被称为一种端对端协议 用于发送和接收数据的虚拟链路,发送端并按适当的顺序放好传送,接收端收到后在将其正确的还原

TCP协议使用重发机制

 


17.3.2 使用ServerSocket 创建TCP服务器端

java中能接收其他实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接


17.3.3使用Socket进行通信

客户端通常可以使用Socket的构造器来连接到指定的服务器

 


17.3.4 加入多线程

客户端读取服务器数据的线程会被阻塞,所以系统应该单独启动一个线程,用来专门从服务器端读取数据

 

每一个客户端应该包含两个线程 一个负责读取用户的键盘输入,并写入输出流中 另一个负责读取流中输出流


17.3.5 记录用户信息

程序中可以使用map集合保存用户状态信息

客户端发送来的信息必须有特殊标志,让服务器判断是公聊还是私聊信息,

如果是私聊信息,客户端在发送不同信息之前,先对这些信息进行适当处理,

 


17.3.6 半关闭的ServerSocket

在某一些协议中,通信的数据单位可能是多行,在这种情况下如何表示输出数据已经结束了呢

这种情况下ServerSocket提供了如下两个半关闭的方法,只关闭ServerSocket的输入输出流,可以用来表示数据已经发送结束

shutdownInputStream()

shutdowmOutputStream()

 


17.3.7 使用NIO实现非阻塞Socket通信

java1.4 开始,java提供了NIO API 来开发高性能的网络服务器,前面介绍的网络通信程序也是基于阻塞式的API的,因此服务器必须为每一个客户端都提供一个独立的线程进行处理,这种做法会导致性能下降  使用NIO API 则可以让服务器端使用有限的线程处理连接到服务器端的所有客户端

 


17.4 基于UDP 协议的网络编程

UDP是一种不可靠网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是接受和发送数据包的对象,java提供了DatagramSocket对象作为UDP协议的Socket

 


17.4.1 UDP协议基础

UDP User Datagram Protocol 用户数据报协议,主要是用来支持需要在计算机之间传输数据的网络连接 UDP是一种面向非连接的协议(正式通信之前不必建立与对方建立连接)不可靠协议 使用于一次穿少量数据

UDP协议主要是完成网络数据流和数据包之间的转换,在信息的发送端,UDP协议将网络数据流封装成数据包,然后将数据报发送出去,在信息的接收端UDP协议将数据报转换成实际的内容

 


17.4.2 使用DatagramSocket发送和接收数据

java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它唯一的作用是接收和发送数据报

 


17.5 使用代理服务器

java 5 开始javajava.net包下提供了Proxy ProxySelect两个类,其中Proxy代表代理服务器,ProxySelect表示代理选择类

代理服务器的好处是

1.突破自身的IP限制,对外隐藏自身IP地址,

2.提高访问速度


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
author-avatar
菜蔸蔸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有